\subsubsection{Bank}

\paragraph*{Felelősség}

A bankrabló (\verb+Robber+) kezdeti pozíciója. Speciális Forrás útelem
(\verb+SourceRoadSegment+), amely a játék folyamán egyetlen Robber objektumot
hoz létre.

\paragraph*{Ősosztályok}

\verb+SourceRoadSegment+

\paragraph*{Interfészek}

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+createRobber()+ & \verb+Robber+ példányt visszaadó metódus. A játékos által
irányítható Járművet hozza létre. \\

\end{tabularx}



\subsubsection{Civilian}

\paragraph*{Felelősség}

A szabályok (\verb+Rule+) betartásával közlekedő civil jármű megvalósítása.

\paragraph*{Ősosztályok}

\verb+Vehicle+

\paragraph*{Interfészek}

\verb+ICollideable+

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+observeRule(StopSign)+ & \verb+StopSign+ típusú szabálynak megfelelően
módosítja a Jármű forgalmi súlyát. \\
\verb+observeRule(TrafficLight)+ & \verb+TrafficLight+ típusú szabálynak
megfelelően módosítja a Jármű forgalmi súlyát. \\
\verb+observeRule(SpeedLimit)+ & Az útelemen eltöltendő órajelek számanak (a
jármű sebességének) beállítása a \verb+SpeedLimit+ típusú szabály alapján. \\

\end{tabularx}




\subsubsection{HideOut}

\paragraph*{Felelősség}

A bankrabló rejtekhelyét (és célpontját) reprezentáló speciális nyelő
(\verb+DrainRoadSegment+) útelem, amely csak \verb+Robber+ típusú példányokat
nyel el.

\paragraph*{Ősosztályok}

\verb+DrainRoadSegment+

\paragraph*{Interfészek}

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+pushVehicle(Robber)+ & \verb+Robber+ jármű elnyelése. World értesítése,
hogy váge a játéknak. \\

\end{tabularx}




\subsubsection{ISteppable (interfész)}

Azon objektumok közös interfésze, melyek reagálnak egy órajelütésre. 

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+step() : void+ & Az órajelütésre meghívandó függvény (lépés). Az
implementáló objektumok ezen keresztül érzékelik az idő múlását. \\

\end{tabularx}




\subsubsection{Player}

\paragraph*{Felelősség}

A játékos attribútumait tároló, és a játékos járművét (\verb+Robber+)
nyilvántartó osztyál.

\paragraph*{Ősosztályok}

\paragraph*{Interfészek}

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+lives+ & A játékos életeinek száma. \\

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}
\verb+setVehicle+ & Beállítja a játékos járművét. \\
\verb+decreaseLives+ & Akkor hívódik meg ha a játékos ütközik egy másik járművel.
Ekkor eggyel csökken az életeinek száma. \\
\verb+detectCollision+ & Ellenőrzi, hogy az aktuális útelemen a bankrabló járműve
ütközött-e egy másik járművel. \\
\end{tabularx}




\subsubsection{Police}

\paragraph*{Felelősség}

A rendőrt leíró osztály. Annyiban különbözik egy civiltől (\verb+Civilian+),
hogy a piros lámpákat figyelmen kívül hagyja. Az osztály felelőssége ennek a
viselkedésnek a megvalósítása.

\paragraph*{Ősosztályok}

\verb+Vehicle+

\paragraph*{Interfészek}

\verb+ISteppable+

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+numberOfInstances+ & Statikus attribútum, az úthálózaton közlekedő
rendőrök számát tárolja. \\

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}
\verb+accepRule(StopTable)+ & A stop tábla korlátozásai feldolgozó metódus. \\
\verb+acceptRule(TrafficLight)+ & Üres metódus. A közlekedési lámpák nincsenek
hatással a Rendőrre. \\

\end{tabularx}




\subsubsection{RoadSegment}

\paragraph*{Felelősség}

Az osztály feladata az útelemen (\verb+RoadSegment+) tartózkodó járművek
számontartása, a rajta elhelyezett közlekedési szabályok (tábla, lámpa)
tartalmazása, a \verb+step+ metódusán kapott órajel továbbadása ezeknek az
objektumoknak.

\paragraph*{Ősosztályok}

(nincs)

\paragraph*{Interfészek}

\verb+ISteppable+

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}
\verb+vehicles : Queue<VehicleWrapper>+ & Az útelemen tartózkodó járművek
(FIFO szerkezet tárolja) \\
\verb+rules : List<Rule>+ & Az útelemen elhelyezett közlekedési szabályok \\
\verb+roadSegments+ & Az útelemmel szomszédos útelemek csomagolóinak listája. \\
\verb+currentSpeedLimit+ &  Az útelemen éppen aktuális maximális sebességet
meghatározó szabály (\verb+Rule+). \\
\verb+defaultSpeedLimit+ & Az útelemen megengedett kezdeti maximális sebességet
meghatározó szabály (\verb+Rule+). \\

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}
\verb+addSegmentWrapper+ & A paraméterül kapott útelem csomagolót
(\verb+VehicleWrapper+) felveszi a \verb+roadSegment+ listába. \\
\verb+pushVehicle+ & Új \verb+VehicleWrapper+ példányt fűz a vehicle sor végére. \\
\verb+peakVehicle+ & Visszatér a \verb+vehicle+ sor első elemével. \\
\verb+popVehicle+ & Eltávolítja a \verb+vehicle+ sor első elemét és visszatér azzal. \\
\end{tabularx}




\subsubsection{Robber}

\paragraph*{Felelősség}

A játékos (\verb+Player+) által irányított jármű. A kresz szabályainak betartása
a játékostól függ, viszont a saját forgalmi súlyát az objektum köteles
kiszámítani.

\paragraph*{Ősosztályok}

\verb+Vehicle+

\paragraph*{Interfészek}

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+collided+ & A metódus a paraméterül kapott jármű (\verb+Vehicle+)
típusának megfelelő implementációja módosítja az objektum állapotát ütközés
esetén. \\

\end{tabularx}



\subsubsection{Rule}

\paragraph*{Felelősség}

Forgalmi szabályt reprezentáló absztrakt osztály.

\paragraph*{Ősosztályok}

\paragraph*{Interfészek}

\verb+ISteppable+

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+applyToVehicle+ & A paraméterül kapott Járműnek az \verb+observeRule+
metódusát meghívja aminek saját magát adja át paraméterül. \\

\end{tabularx}




\subsubsection{SourceRoadSegment}

\paragraph*{Felelősség}

Járműveket létrehozó útelem osztály. Általában a városba bevezető útelem.

\paragraph*{Ősosztályok}

\verb+RoadSegment+

\paragraph*{Interfészek}

\verb+ISteppable+

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+step+ & Véletlen időközönként (órajelütésre) egy járművet hoz létre. \\
\verb+createVehicle+ & \verb+Civilian+ példányt visszaadó metódus. \\

\end{tabularx}




\subsubsection{StopTable}

\paragraph*{Felelősség}

Speciális szabály osztály, amely a Stop táblát reprezentálja.

\paragraph*{Ősosztályok}

\verb+Rule+

\paragraph*{Interfészek}

\verb+ISteppable+

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+getFactor+ & A táblának megfelelő (konstans) szorzóval tér vissza. A 
járművek a forgalmi súlyukat ennek figyelembevételével számolják ki. \\

\end{tabularx}




\subsubsection{DrainRoadSegment}

\paragraph*{Felelősség}

Járműveket elnyelő útelem osztály. Általában a városból kivezető útelem.

\paragraph*{Ősosztályok}

\verb+RoadSegment+

\paragraph*{Interfészek}

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+pushVehicle+ & Törli a paraméterként kapott járművet (\verb+Vehicle+). \\

\end{tabularx}




\subsubsection{Timer}

\paragraph*{Felelősség}

Órajelet szolgáltató osztály. Egy \verb+ISteppable+ interfészt megvalósító
objektum step metódusát hívja meg adott időközönként egy végtelen ciklusban.

\paragraph*{Ősosztályok}

\paragraph*{Interfészek}

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+frequency+ & Órajel frekvenciája. \\

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\end{tabularx}




\subsubsection{TrafficLight}

\paragraph*{Felelősség}

Speciális szabály (\verb+Rule+) osztály, amely a közlekedési lámpát valósítja
meg.

\paragraph*{Ősosztályok}

\verb+Rule+

\paragraph*{Interfészek}

\verb+ISteppable+

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+state+ & Lámpa állapota (piros, zöld). \\

\end{tabularx}


\subsubsection{Bunny}

\paragraph*{Felelősség}

Speciális szabály (\verb+Rule+) osztály, amely a húsvéti nyuszit valósítja meg.
 A húsvéti nyuszi időnként feltűnik az utakon. Ha a rabló elüti a nyuszit, akkor rövid időre immunitást élvez, vagyis a rendőrök ekkor nem tudják elkapni, bárhogyan próbálkoznak is. 

\paragraph*{Ősosztályok}

\verb+Rule+

\paragraph*{Interfészek}

\verb+ISteppable+

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+state+ & Lámpa állapota (piros, zöld). \\

\end{tabularx}



\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+step+ & Adott órajelenként változtatja a lámpa állapotát. \\
\verb+getFactor+ & A lámpa állapotának megfelelő szorzóval tér vissza. A járművek
a forgalmi súlyukat ennek figyelembevételével számolják ki. \\

\end{tabularx}




\subsubsection{Vehicle}

\paragraph*{Felelősség}

A járműveket reprezentáló osztály.

\paragraph*{Ősosztályok}

\paragraph*{Interfészek}

\verb+ISteppable+

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+ticksPerSegment+ & Az útelemeken eltöltendő órajelütések száma. (A
sebesség "reciproka".) \\
\verb+weight+ & Alapértelemezett forgalmi súly, az útelemen lévő szabályok
alkalmazása nálkül. \\
\verb+wrapper+ & A jármű csomagolójára (\verb+VehicelWrapper+) mutató referencia. \\

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+chooseDestination+ & Az aktuális útszegmenshez kapcsolódó szegmensek közül
kiválasztja azt amelyikre a jármű a közlekedési súlyának megfelelően
továbbhaladhat. Ha több ilyen is van, akkor véletlenszerűen választ. \\
\verb+moveToSegment+ & Elvégzi a szükséges lépéseket, ahhoz, hogy a jármű az
aktuális útszegmensről átlépjen a célba vett szegmensre. \\
\verb+observeRule+ & Módosítja a jármű belső állapotát a paraméterül kapott
szabálynak megfelelően. \\
\verb+getDefaultWeight+ & Visszatér az alapértelmezett forgalmi súllyal. \\
\verb+destroy+ & Ütközés vagy a város elhagyásának esetén hívódik meg. \\
\verb+getWrapper+ & Visszatér a járműhöz tartozó csomagolóval. \\

\end{tabularx}




\subsubsection{VehicleWrapper}

\paragraph*{Felelősség}

A Jármű (\verb+Vehicle+) és az Útelem (\verb+RoadSegment+) gyenge kapcsolatáért
felelős osztály.

\paragraph*{Ősosztályok}

\paragraph*{Interfészek}

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+vehicle+ & Jármű (\verb+Vehicle+) referencia. \\
\verb+ticksRemaining+ & Az útelemen eltöltendő órajel ütések számlálója. \\
\verb+currentSegment+ & Az aktuális útelem. \\
\verb+currentVehicleWeight+ & Ez az érték a közlekedési szabályok
figyelembevételét és a kereszteződésekbe való belépés prioritását határozza
meg. \\

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+step+ & Órajelütésre meghívódó metódus. \\
\verb+getVehiclePosition+ & Visszaadja a jármű aktuális pozícióját az útelemen.
A pozíciót az útelemen eltöltendő órajelek száma és az eltelt órajelek számának
hányadosából számolja. \\
\verb+getVehicle+ & Visszatér a Jármű referenciájával. \\

\end{tabularx}




\subsubsection{World}

\paragraph*{Felelősség}

A világot reprezentáló osztály. Gondoskodik az úthálózat felépítéséről,
nyilvántartja annak elemeit, és közvetíti az órajelet ezen elemekhez. \\

\paragraph*{Ősosztályok}

\paragraph*{Interfészek}

\verb+ISteppable+

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+timer+ & Időzítő (\verb+Timer+). \\
\verb+player+ & A Játékost reprezentáló speciális \verb+VehicleWrapper+
(\verb+Player+). \\
\verb+roadSegments+ & Útelemek listája. \\
\verb+sourceSegments+ & Forrás útelemek (\verb+SourceRoadSegment+) listája. \\

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+step+ & Órajelütésre meghívódó metódus. \\
\verb+getRandomRoadSegment+ & Visszatét egy vélteltenszerűen választott forrás
útelemmel. \\
\verb+loadMap+ & Fájlból betölti és felépíti az úthálózatot. \\
\verb+gameEnded+ & A játék lezárását hajtja végre. \\

\end{tabularx}




\subsubsection{RoadSegmentWrapper}

\paragraph*{Felelősség}

Útelem (\verb+RoadSegment+) csomagoló absztrakt osztály.

\paragraph*{Ősosztályok}

\paragraph*{Interfészek}

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+segment+ & Útelem referencia. \\

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+getRoadSegment+ & Visszatér az objektum által becsomagolt útelemmel. \\

\end{tabularx}




\subsubsection{IncomingRoadSegmentWrapper}

\paragraph*{Felelősség}

Egy adott útelemre (\verb+RoadSegmen+) \emph{befelé} vezető szomszédos útelemet
csomagoló osztály.

\paragraph*{Ősosztályok}

\verb+RoadSegmentWrapper+

\paragraph*{Interfészek}

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+getTrafficWeight+ & Visszaadja az objektum által csomagolt útelemen
(\verb+RoadSegmen+) a \verb+vehicles+ listában legelöl álló kocsiknak a súlyát.
\\
\verb+getEntryWeight+ & Konstans akkora értéket ad vissza amekkora biztosan
egyik járműnek sem lehet (,,végtelen''). Ezáltal erre az útszakaszra nem léphet
jármű. \\

\end{tabularx}




\subsubsection{OutgouingRoadSegmentWrapper}

\paragraph*{Felelősség}

Egy adott útelemből (\verb+RoadSegment+) \emph{kifelé} vezető szomszédos
útelemet csomagoló osztály.

\paragraph*{Ősosztályok}

\verb+RoadSegmentWrapper+

\paragraph*{Interfészek}

\paragraph*{Attribútumok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\end{tabularx}

\paragraph*{Metódusok}

~\\

\begin{tabularx}{\textwidth}{|X|X|}

\verb+getTrafficWeight+ & Konstans 0 értéket ad vissza, mivel egy adott útelemre
való belépés szempontjából a kifelé vezető útelemeken lévő járművek súlya
lényegtelen. \\
\verb+getEntryWeight+ & Meghívja a csomagolt útelem szomszédjainak csomagolóin a
\verb+getTrafficWeight+ metódust és a kapott értékek maximumával tér vissza.
Tehát az útelemre való belépéshez szükséges minimális súly a következő útelem
bejövő szomszédjain a sor eleján lévő kocsik súlyának maximuma. \\

\end{tabularx}




